Network operators frequently apply address translation to separate the local Internet protocol (IP) addresses they use inside their networks from the global IP addresses at which the networks are reachable from an external network such as the Internet. One of the various purposes is to keep their local IP address structure independent of the provider assigning their global IP addresses, to conceal their internal network topology from the rest of the Internet for security reasons, or to conserve global IP addresses by sharing a single global IP address among multiple local addresses. In particular, the latter purpose is of growing importance, where the imminent run-out of unallocated global IP version 4 (IPv4) address puts a pressure on network operators to use these addresses economically.
In order to accomplish the purposes identified above, address translators perform two functions. First, they rewrite addresses in packets en route, swapping local IP addresses with the corresponding global IP addresses or vice versa. This enables provider independent and network topology concealment. Second, address translators multiplex multiple local addresses onto a single global address. This enables conservation of global addresses. To enable de-multiplexing of packets received at a shared global address back onto the right local address, address translators store address mappings as connection-specific disambiguation state, and they use the connection initiator's port number in received packets as indexes into this state. To ensure uniqueness of this port number across all connections handled by an address translator, the port number may have to be translated. The mapping between the resulting local and global port numbers is then stored as a part of the corresponding disambiguation state.
Address translation requires awareness in applications that expect to be contacted by remote peers. Such applications must refer their peers to a combination of global address and global port number at which they are reachable by those peers, since in the presence of an address translator, their local address and global port number may be unreachable by the peers. The applications must hence have a means through which they can discover a global address and global port number. This is commonly referred to as address translator traversal. Conventional systems for address translator traversal require applications to inquire of infrastructure what a packet's source address and global port number look like after translation.
The conventional address translator traversal methods cause extra signaling, which may reduce the effective network bandwidth; reduce uptime of battery-powered hosts; and increase application start-up latencies. This signaling overhead can be large because: (a) it must be done for every application, and (b) it not only occurs during the beginning of a communication session, but also periodically for refresh purposes. The existing address translator traversal methods typically exchange multiple message pairs in order to determine the type of address translator through which they are reachable. The address translator traversal is typically performed by individual applications even if multiple applications reside on the same host.